/*
 * @Author: ljkt
 * @Version: 2.0
 * @Date: 2022-05-16 11:06:33
 * @LastEditors: ljkt
 * @LastEditTime: 2025-01-28 21:50:30
 * @Description:
 */
#include "./Hal/MCU_BF7612DM/Hal_Common_Func.h"

#if defined(EN_TIMER0) || defined(EN_TIMER1) || defined(EN_TIMER2) || defined(EN_TIMER3)
s_hal_tmrx_t gHalTmrx[e_HAL_TIMER_MAX];
void Hal_Tmrx_Start(s_tmrx_config_t *config)
{
	switch (config->index)
	{
#ifdef EN_TIMER0
	case e_HAL_TIMER0:
		break;
#endif
#ifdef EN_TIMER1
	case e_HAL_TIMER1:
		break;
#endif
#ifdef EN_TIMER2
	case e_HAL_TIMER2:
		break;
#endif
#ifdef EN_TIMER3
	case e_HAL_TIMER3:
		break;
#endif
	default:
		break;
	}
}
void Hal_Tmrx_Stop(s_tmrx_config_t *config)
{
	switch (config->index)
	{
#ifdef EN_TIMER0
	case e_HAL_TIMER0:
		break;
#endif
#ifdef EN_TIMER1
	case e_HAL_TIMER1:
		break;
#endif
#ifdef EN_TIMER2
	case e_HAL_TIMER2:
		break;
#endif
#ifdef EN_TIMER3
	case e_HAL_TIMER3:
		break;
#endif
	default:
		break;
	}
}
void Hal_Tmrx_IF_Clr(s_tmrx_config_t *config)
{
	switch (config->index)
	{
#ifdef EN_TIMER0
	case e_HAL_TIMER0:
		TH0 = gHalTmrx[e_HAL_TIMER0].reload >> 8ul;
		TL0 = gHalTmrx[e_HAL_TIMER0].reload >> 0ul;
		T0_INT_FLAG_CLR; // 清除Timer0中断标志
		break;
#endif
#ifdef EN_TIMER1
	case e_HAL_TIMER1:
		break;
#endif
#ifdef EN_TIMER2
	case e_HAL_TIMER2:
		break;
#endif
#ifdef EN_TIMER3
	case e_HAL_TIMER3:
		break;
#endif
	default:
		break;
	}
}
void Hal_Tmrx_Init(s_tmrx_config_t *config)
{
	switch (config->index)
	{
#ifdef EN_TIMER0
	case e_HAL_TIMER0:
		EA = 0; // 关总中断；

		T0_IP_SET;		 // 根据实际应用设置优先级
		T0_INT_FLAG_CLR; // 清除Timer0中断标志

		T0_MODE_SET(1);																						  // Timer0定时模式选择：0：13bit定时，1：16bit定时，2：8bit重载定时，3：两个8位定时寄存器 tiemr0_clk=(1/12)*sys_clk
		gHalTmrx[e_HAL_TIMER0].reload = 65536UL - (((unsigned long)(SYSCLK)) * 1000000ul / 12ul / config->f); // ((65536 - ((uint)((TIMER0_INIT_US * 1.0) * ((SYSCLK * 1.0) / 12.0)))) >> 8);
		TH0 = gHalTmrx[e_HAL_TIMER0].reload >> 8ul;
		TL0 = gHalTmrx[e_HAL_TIMER0].reload >> 0ul;
#ifdef SNS_NUM
#if SNS_NUM
		ctk_soft_reset_max_count = (500000 / TIMER0_INIT_US); // 计算定时500ms的次数
#endif
#endif

#ifdef IICS_EN
#if IICS_EN
		sclen_soft_reset_max_count = (500000 / TIMER0_INIT_US); // 计算定时500ms的次数
#endif
#endif

#ifdef IDLE_MODE
#if IDLE_MODE
		Idle_Time_Count = (1000 / TIMER0_INIT_US); // 计算定时1ms的次数
#endif
#endif

#ifdef ADC_IS_OPEN
#if ADC_IS_OPEN
#if ADC_MODE
		ADC_Rest_Max_Count = (100000 / TIMER0_INIT_US); // 计算定时100ms的次数
#endif
#endif
#endif

		T0_IE_SET; // 使能Timer0中断
		T0_RUN;	   // 开启Timer0
		EA = 1;	   // 开总中断
		break;
#endif
#ifdef EN_TIMER1
	case e_HAL_TIMER1:
		break;
#endif
#ifdef EN_TIMER2
	case e_HAL_TIMER2:
		break;
#endif
#ifdef EN_TIMER3
	case e_HAL_TIMER3:
		break;
#endif
	default:
		break;
	}
	Hal_Tmrx_Start(config);
}

#endif